perm filename DIR.FOO[TIM,LSP] blob sn#780212 filedate 1984-12-09 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00004 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	∂84-11-25 20:21
C00007 00003	∂84-12-08
C00011 00004	∂09-Dec-84  0829	ROD  	More, mumble  
C00012 ENDMK
C⊗;
∂84-11-25 20:21
To: EJG
From: Rod

Please make sure PW sends all the latest documentation that you and EB have
generated. In particular I need to see the inline CONS stuff
from EB.

Here are my current plans (sort of).

1. Tomorrow work on LAP spec (then disappear to Key West till Thursday
   (my fourth trip in  five weeks!)).

2. Generate a proposal for handling throw of multiple values--it is
   a little tricky to deal with interrupts that can call lisp in
   the middle. Does EB (or anyone) have anything written down on
   the general interrupt issue--I seem to recall there was something
   in his cons stuff. Also I'm hopeful of reducing the amount of shuffling
   that currently happens in tail recursive pass ons of multiple
   values. In addition I need to find a way to make MULTIPLE-VALUE-CALL
   and the current analysis model, where the stack height is always
   known at analysis time, peacefully coexist.

Post SUN arrival:

3. Install open coding for MAPCAR and friends (already written). This
   makes for much improved coding style in the compiler--before I thought
   it was hard and wanted the compiler to be able to compile itself without
   it.

4. Implement code literals for EB's cons. Also fix function call sequence
   to make use of PEA and remove an instruction.
   
5. Expand multiple values to full CL spec. (Have the alpha code done and
   ready to install.) Includes tricky business with THROW and UNWIND-PROTECT.

6. Make GO work through CATCH and UNWIND-PROTECT.
    (This enables special binds in DO bodies to work(!!), amongst
     other things.)

7. Handle &KEY in alpha (initially so we can use DEFSTRUCT).

8. Add closures (and flavor instance-vars).

9. Make everything else full CL spec.

10. Make all code it produces horrendously fast.


Maybe JK wants to know this and redirect my priorities.

Please don't delete this as I will want to refer to it.
Thanks.

∂84-11-29 00:40
To: ROD
From: EJG
Sounds good.  I don't understand the GO/CATCH issue completely - seems
like a lot of overhead.  EB and I are supposed to do a code review
for Primops on Monday - the code is almost all written, the spec is
lagging behind, and the test plan is so far an imagination figment.
I'll see if your priorities seem good to Jussi and others, and try
to make sure all current online doc gets sent with your Sun tape
(our 1/4" drive is still not hooked up, I think).  Anything you
want to see sooner could be phoned in via whitney, I guess.  (EB
moved the shortfloat sign bit from the high order secondary tag
bit to the low order - do you have preferences on this?)  Sun
was just checking on our ability to pay for yours, and claimed
they would have shipped already if not for a minor bank screw-up, now
fixed.  I'll be out of touch Friday and Saturday - phone Paul/Eric/Jussi
about anything that seems urgent...

∂84-11-29 11:05
To: EJG
From: ROD
ARRRRGGGGGHHHHH!!!! Still not shipped ?!!??
About GO: I didn't mena implement it with CATCH etc., but make it
work so you can GO outside of a pending CATCH or UNWIND-PROTECT
which is part of the CL defn.
∂84-12-08
To: EJG
From: Rod


I fixed the bug you reported. It was because the code was
(let ((x x)) ...). There were actually two bugs which both
got tickled in weird ways.

On other fronts:

1. You guys forgot to send me /usr/lib/lisp directory which includes
   things like the assembler and the trace package. A symbolic link
   to the regular assembler lets me compile, but I had to hack up
   my own trace...
 
2. In 68k-fung.lisp you forgot a whole bunch of ":effs nil" which
   makes for all sorts of extra stack munging. (Remember we
   made the default be t everywhere.) I changed my copy but its
   probably out of date now so you should change yours I guess.
   You can also declare ash& and lsh& to take fixnump arguments.

3. There's an new implication of this sub-primitive scheme I
   hadn't thought of before. It's often the case that, say,
   sys:fixnum-compare ends up with literal arguments even
   though the >& it came from didn't . This can happen
   quite easily due to the let variables of a transform
   getting removed for instance. So there needs to be callable
   versions of all these functions. I'll try to write them
   in the next day or two. The primary and secondary type
   test are going to be the killers.

4. I suspect you don't really want to declare arguments to
   be fixnums as in (a dreg fixnum), although it doesn't
   break anything at the moment it will in the future.

5. I see the compiler can't do "car" anymore. However it
   does seem to know about "%car". I assume this is a half
   installed scheme. But why do we need %car, when car will do?
   (see note 4 above).

6. The compiler can no longer do cadr, first, second etc.
   These used to be in commacs. Don't forget to put them
   somewhere.

7. I can't get any failures of the let variable elimination mechanism
   to happen, in the way which I remember EB reported to me a
   couple of weeks ago. Maybe I've remembered the symptoms wrong
   or maybe they were all instances of the (let ((x x))..) bug.
   Can you get EB to tell me again what was going wrong.
∂09-Dec-84  0829	ROD  	More, mumble  
I realized there are still some subtle bugs in the analyzer when
variables get shadowed. I think I have to make alphatization
uniquify all variable names...

∂09-Dec-84  2141	ROD  	car's %car's and dtp-cons    
A. I noticed that you and EB use different values for the primary data
   types (besides different names). Also his don't conform to the
   number=even scheme. I guess you really know this and will 
   sort it out this week, but just in case you forgot...

B. Can you ask EB to provide me with the following examples:
   1. The cases he told me about let vars not being removed.
      I can't get them to fail the way I remember he told me.
   2. The case that stimulated his Nov-29 changes to alpha.lisp.
      The changes broke some cases of normal macro expansion
      and I need to check my nnew changes work right on his examples.
   3. A couple of weeks ago he told me that the compiler sometimes
      complained that AND was undefined at the end even though
      everything compiled right. Complaints about non-apparent
      functions was one of the symptioms that led me to the bug
      fixed in 2 above, but never AND. Can he give me a specific
      example of worng complaints. (PRINT doesn't count, I found
      out why that one was happenning -- needed to change the load
      order at build time.)

C. Since car ==> %car has to be switchable offable, and since I
   assume %car ==> sys:pointer-ref-constant is going to stay on all the
   time, hte only reason not to change back to a switchable
   car ==> sys:pointer-ref-constnant is that you want to write code
   that mixes safe CAR's and unsafe %CAR's which will presumably
   be knwo to be safe by the programmer (just wanting %CAR's is not
    a good enough reason as you could gloabally turn on the switch.)
   So the only rationale I can see is that you want a priori known
   safe compiler macros to expand into %car's while the user's
   car's are being bullet proofed by the compiler. The question then
   is why not right car ==> sys:pointer-ref-constant *and*
   %car ==> sys:pointer-ref-constant where the first is switchable
   but the second is not. This leads to one less layer of
   macro expansion which will make the compiler faster.
   I guess the question then is that worth the trouble of making
   two copies?

Enough rambling...